#ifndef BIT_H_
#define BIT_H_

#include "myTypes.h"



typedef struct{
	byte *	data;	//données
	size_t	len;	//longueur du buffer en bits
	byte *	curs;	//curseur de lecture/ecriture
	bloc_t	bit:8;	//mask désignant le bit courrant (ex: "00000100" == 0x04)
}bitbuf_t;

//Écrire un 0 dans dst
extern void bit_put0(bitbuf_t * dst);

//Écrire un 1 dans dst
extern void bit_put1(bitbuf_t * dst);

//Lire un bit depuis src
extern int bit_get(bitbuf_t * src);

//Lire bc btits depuis src
extern bloc_t bit_read(bitbuf_t * src, bitcount_t bc);

//Écrire bc bits de b dans dst
extern void   bit_write(bitbuf_t* dst, bloc_t b, bitcount_t bc);

//Initialise un bitbuf_t
extern void bit_initBuf(bitbuf_t * buf, size_t len);

//Libère proprement la mémoire alloué pour un buffer
extern void bit_freeBuf(bitbuf_t * buf);

//Affichage sur stdout...
extern void bit_printbloc(bloc_t b);
extern void bit_print(bitbuf_t * buf);

//Donne la position du curseur en nombre de bits
extern size_t bit_getpos(bitbuf_t * buf);

#define BITSEEK_SET		1
#define BITSEEK_CUR		2
extern size_t bit_seek(bitbuf_t * buf, size_t byteOffset, bitcount_t BitOffset, int whence);


#endif /* BIT_H_ */
